WebGLã¡ãã·ã¥ããªããã£ããªã¹ã¿ãŒããæ¢æ±ãããžãªã¡ããªã¹ããªããã¬ã³ããªã³ã°ãæé©åãå¹ççãª3Dã°ã©ãã£ãã¯ã¹ã®ããã®å©ç¹ãå®è£ ãããã©ãŒãã³ã¹ã解説ã
WebGLã¡ãã·ã¥ããªããã£ããªã¹ã¿ãŒãïŒå¹ççãªãžãªã¡ããªã¹ããªããã¬ã³ããªã³ã°
WebGLãš3Dã°ã©ãã£ãã¯ã¹ã®äžçã§ã¯ãå¹ççãªã¬ã³ããªã³ã°ãæãéèŠã§ããè€éãª3Dã¢ãã«ãæ±ãéããžãªã¡ããªã®åŠçãšæç»æ¹æ³ãæé©åããããšã¯ãããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ãäžããŸãããã®å¹çãéæããããã®åŒ·åãªãã¯ããã¯ã®äžã€ãã¡ãã·ã¥ããªããã£ããªã¹ã¿ãŒãã§ãããã®ããã°èšäºã§ã¯ãã¡ãã·ã¥ããªããã£ããªã¹ã¿ãŒããšã¯äœãããã®å©ç¹ãWebGLã§ã®å®è£ æ¹æ³ããããŠãã®å¹æãæå€§åããããã®éèŠãªèæ ®äºé ã«ã€ããŠè©³ããæãäžããŠãããŸãã
ãžãªã¡ããªã¹ããªãããšã¯ïŒ
ããªããã£ããªã¹ã¿ãŒãã«é£ã³èŸŒãåã«ããžãªã¡ããªã¹ããªãããçè§£ããããšãäžå¯æ¬ ã§ãããžãªã¡ããªã¹ããªããïŒäžè§åœ¢ã¹ããªãããŸãã¯ã©ã€ã³ã¹ããªããïŒã¯ãäžé£ã®æ¥ç¶ãããããªããã£ããå®çŸ©ãããæ¥ç¶ãããé ç¹ã®ã·ãŒã±ã³ã¹ã§ããåããªããã£ãïŒäŸïŒäžè§åœ¢ïŒãåå¥ã«æå®ãã代ããã«ãã¹ããªããã¯é£æ¥ããããªããã£ãéã§é ç¹ãå¹ççã«å ±æããŸããããã«ãããã°ã©ãã£ãã¯ã¹ã«ãŒãã«éä¿¡ããå¿ èŠã®ããããŒã¿éãåæžãããã¬ã³ããªã³ã°ãé«éåãããŸãã
ç°¡åãªäŸãèããŠã¿ãŸããããã¹ããªãããªãã§é£æ¥ãã2ã€ã®äžè§åœ¢ãæç»ããã«ã¯ã6ã€ã®é ç¹ãå¿ èŠã§ãïŒ
- äžè§åœ¢1ïŒV1, V2, V3
- äžè§åœ¢2ïŒV2, V3, V4
äžè§åœ¢ã¹ããªããã䜿çšãããšãå¿ èŠãªé ç¹ã¯4ã€ã ãã§ãïŒV1, V2, V3, V4ã2ã€ç®ã®äžè§åœ¢ã¯ãåã®äžè§åœ¢ã®æåŸã®2ã€ã®é ç¹ãšæ°ããé ç¹ã䜿çšããŠèªåçã«åœ¢æãããŸãã
åé¡ç¹ïŒäžé£ç¶ãªã¹ããªãã
ãžãªã¡ããªã¹ããªããã¯é£ç¶ãããµãŒãã§ã¹ã«ã¯æé©ã§ããããããåãé ç¹ãããã¡å ã§è€æ°ã®äžé£ç¶ãªã¹ããªãããæç»ããå¿ èŠãããå Žåã¯ã©ããªãã§ããããïŒåŸæ¥ã¯ãã¹ããªããããšã«åå¥ã®æç»ã³ãŒã«ã管çããå¿ èŠããããããã«ã¯æç»ã³ãŒã«ã®åãæ¿ãã«äŒŽããªãŒããŒããããçºçããŸãããã®ãªãŒããŒãããã¯ã倿°ã®å°ããäžé£ç¶ãªã¹ããªãããã¬ã³ããªã³ã°ããå Žåã«é¡èã«ãªãå¯èœæ§ããããŸãã
äŸãã°ã忣æ¹åœ¢ã®èŒªéãã©ã€ã³ã¹ããªããã§è¡šçŸãããæ£æ¹åœ¢ã®ã°ãªãããæç»ããããšãæ³åããŠãã ããããããã®æ£æ¹åœ¢ãå¥ã ã®ã©ã€ã³ã¹ããªãããšããŠæ±ãããå Žåãæ£æ¹åœ¢ããšã«åå¥ã®æç»ã³ãŒã«ãå¿ èŠã«ãªããå€ãã®æç»ã³ãŒã«åãæ¿ããçºçããŸãã
æäžäž»ãã¡ãã·ã¥ããªããã£ããªã¹ã¿ãŒã
ããã§ã¡ãã·ã¥ããªããã£ããªã¹ã¿ãŒãã®åºçªã§ããããªããã£ããªã¹ã¿ãŒãã䜿çšãããšãåãæç»ã³ãŒã«å ã§ã¹ããªããã广çã«ãäžæãããæ°ããã¹ããªãããéå§ã§ããŸããããã¯ãGPUã«çŸåšã®ã¹ããªãããçµäºããŠæ°ããã¹ããªãããéå§ããããä¿¡å·ãéãç¹å¥ãªã€ã³ããã¯ã¹å€ã䜿çšããããšã§å®çŸãããŸãããã®éã以åã«ãã€ã³ããããé ç¹ãããã¡ãšã·ã§ãŒããŒããã°ã©ã ãåå©çšãããŸããããã«ãããè€æ°ã®æç»ã³ãŒã«ã«äŒŽããªãŒããŒããããåé¿ã§ããŸãã
ãã®ç¹å¥ãªã€ã³ããã¯ã¹å€ã¯ãéåžžãæå®ãããã€ã³ããã¯ã¹ããŒã¿åã®æå€§å€ã§ããäŸãã°ã16ãããã®ã€ã³ããã¯ã¹ã䜿çšããŠããå Žåãããªããã£ããªã¹ã¿ãŒãã€ã³ããã¯ã¹ã¯65535ïŒ216 - 1ïŒã«ãªããŸãã32ãããã®ã€ã³ããã¯ã¹ã䜿çšããŠããå Žåã¯ã4294967295ïŒ232 - 1ïŒã«ãªããŸãã
æ£æ¹åœ¢ã°ãªããã®äŸã«æ»ããšãä»ãã°ãªããå šäœãåäžã®æç»ã³ãŒã«ã§è¡šçŸã§ããŸããã€ã³ããã¯ã¹ãããã¡ã«ã¯ã忣æ¹åœ¢ã®ã©ã€ã³ã¹ããªããã®ã€ã³ããã¯ã¹ãå«ãŸãã忣æ¹åœ¢ã®éã«ããªããã£ããªã¹ã¿ãŒãã€ã³ããã¯ã¹ãæ¿å ¥ãããŸããGPUã¯ãã®ã·ãŒã±ã³ã¹ããåäžã®æç»ã³ãŒã«ã§æç»ãããè€æ°ã®äžé£ç¶ãªã©ã€ã³ã¹ããªãããšããŠè§£éããŸãã
ã¡ãã·ã¥ããªããã£ããªã¹ã¿ãŒãã®å©ç¹
ã¡ãã·ã¥ããªããã£ããªã¹ã¿ãŒãã®äž»ãªå©ç¹ã¯æç»ã³ãŒã«ãªãŒããŒãããã®åæžã§ããè€æ°ã®æç»ã³ãŒã«ãåäžã®æç»ã³ãŒã«ã«çµ±åããããšã§ãç¹ã«å€æ°ã®å°ããäžé£ç¶ãªã¹ããªãããæ±ãå Žåã«ãã¬ã³ããªã³ã°ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸããããã«ããã以äžã®å¹æãåŸãããŸãïŒ
- CPU䜿çšçã®åäžïŒ æç»ã³ãŒã«ã®ã»ããã¢ãããšçºè¡ã«è²»ããæéãæžãããšã§ãCPUã¯ã²ãŒã ããžãã¯ãAIãã·ãŒã³ç®¡çãªã©ã®ä»ã®ã¿ã¹ã¯ã«è§£æŸãããŸãã
- GPUè² è·ã®è»œæžïŒ GPUã¯ããå¹ççã«ããŒã¿ãåãåããæç»ã³ãŒã«ã®åãæ¿ãã«è²»ããæéãæžãããå®éã«ãžãªã¡ããªãã¬ã³ããªã³ã°ããæéãå¢ããããšãã§ããŸãã
- ã¬ã€ãã³ã·ã®äœæžïŒ æç»ã³ãŒã«ãçµã¿åãããããšã§ãã¬ã³ããªã³ã°ãã€ãã©ã€ã³å šäœã®ã¬ã€ãã³ã·ãççž®ãããããã¹ã ãŒãºã§å¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå®çŸããŸãã
- ã³ãŒãã®ç°¡çŽ åïŒ å¿ èŠãªæç»ã³ãŒã«ã®æ°ãæžããããšã§ãã¬ã³ããªã³ã°ã³ãŒãã¯ããã¯ãªãŒã³ã§çè§£ãããããªãããšã©ãŒãçºçãã«ãããªããŸãã
ããŒãã£ã¯ã«ã·ã¹ãã ãããã·ãŒãžã£ã«ã³ã³ãã³ããªã©ãåçã«çæããããžãªã¡ããªãå«ãã·ããªãªã§ã¯ãããªããã£ããªã¹ã¿ãŒãã¯ç¹ã«æçã§ãããžãªã¡ããªãå¹ççã«æŽæ°ããåäžã®æç»ã³ãŒã«ã§ã¬ã³ããªã³ã°ããããšã§ãããã©ãŒãã³ã¹ã®ããã«ããã¯ãæå°éã«æããããšãã§ããŸãã
WebGLã§ã®ã¡ãã·ã¥ããªããã£ããªã¹ã¿ãŒãã®å®è£
WebGLã§ã¡ãã·ã¥ããªããã£ããªã¹ã¿ãŒããå®è£ ããã«ã¯ãããã€ãã®æé ãå¿ èŠã§ãïŒ
- æ¡åŒµæ©èœã®æå¹åïŒ WebGL 1.0ã¯ãã€ãã£ãã§ã¯ããªããã£ããªã¹ã¿ãŒãããµããŒãããŠããŸããã`OES_primitive_restart`æ¡åŒµæ©èœãå¿ èŠã§ããWebGL 2.0ã¯ãã€ãã£ãã§ãµããŒãããŠããŸããæ¡åŒµæ©èœã確èªããæå¹ã«ããå¿ èŠããããŸãïŒWebGL 1.0ã䜿çšããå ŽåïŒã
- é ç¹ãããã¡ãšã€ã³ããã¯ã¹ãããã¡ã®äœæïŒ ãžãªã¡ããªããŒã¿ãšããªããã£ããªã¹ã¿ãŒãã€ã³ããã¯ã¹å€ãå«ãé ç¹ãããã¡ãšã€ã³ããã¯ã¹ãããã¡ãäœæããŸãã
- ãããã¡ã®ãã€ã³ãïŒ é ç¹ãããã¡ãšã€ã³ããã¯ã¹ãããã¡ãé©åãªã¿ãŒã²ããïŒäŸïŒ`gl.ARRAY_BUFFER`ããã³`gl.ELEMENT_ARRAY_BUFFER`ïŒã«ãã€ã³ãããŸãã
- ããªããã£ããªã¹ã¿ãŒãã®æå¹åïŒ `gl.enable(gl.PRIMITIVE_RESTART_OES)`ãåŒã³åºããŠ`OES_primitive_restart`æ¡åŒµæ©èœãæå¹ã«ããŸãïŒWebGL 1.0ïŒãWebGL 2.0ã®å Žåããã®æé ã¯äžèŠã§ãã
- ãªã¹ã¿ãŒãã€ã³ããã¯ã¹ã®èšå®ïŒ `gl.primitiveRestartIndex(index)`ã䜿çšããŠããªããã£ããªã¹ã¿ãŒãã€ã³ããã¯ã¹å€ãæå®ããŸãã`index`ã¯é©åãªå€ïŒäŸïŒ16ãããã€ã³ããã¯ã¹ã®å Žåã¯65535ïŒã«çœ®ãæããŸããWebGL 1.0ã§ã¯ãããã¯`gl.primitiveRestartIndexOES(index)`ã§ãã
- èŠçŽ ã®æç»ïŒ `gl.drawElements()`ã䜿çšããŠãã€ã³ããã¯ã¹ãããã¡ãçšããŠãžãªã¡ããªãã¬ã³ããªã³ã°ããŸãã
以äžã¯ãWebGLã§ããªããã£ããªã¹ã¿ãŒãã䜿çšããæ¹æ³ã瀺ãã³ãŒãäŸã§ãïŒWebGLã³ã³ããã¹ããé ç¹ãããã¡ãã€ã³ããã¯ã¹ãããã¡ãã·ã§ãŒããŒããã°ã©ã ã¯ãã§ã«ã»ããã¢ããæžã¿ãšä»®å®ããŸãïŒïŒ
// OES_primitive_restartæ¡åŒµæ©èœã確èªããŠæå¹ã«ããïŒWebGL 1.0ã®ã¿ïŒ
let ext = gl.getExtension("OES_primitive_restart");
if (!ext && gl instanceof WebGLRenderingContext) {
console.warn("OES_primitive_restart extension is not supported.");
}
// é ç¹ããŒã¿ïŒäŸïŒ2ã€ã®æ£æ¹åœ¢ïŒ
let vertices = new Float32Array([
// æ£æ¹åœ¢1
-0.5, -0.5, 0.0,
0.5, -0.5, 0.0,
0.5, 0.5, 0.0,
-0.5, 0.5, 0.0,
// æ£æ¹åœ¢2
-0.2, -0.2, 0.0,
0.2, -0.2, 0.0,
0.2, 0.2, 0.0,
-0.2, 0.2, 0.0
]);
// ããªããã£ããªã¹ã¿ãŒãã€ã³ããã¯ã¹ãå«ãã€ã³ããã¯ã¹ããŒã¿ïŒ16ãããã€ã³ããã¯ã¹ã®å Žå65535ïŒ
let indices = new Uint16Array([
0, 1, 2, 3, 65535, // æ£æ¹åœ¢1ããªã¹ã¿ãŒã
4, 5, 6, 7 // æ£æ¹åœ¢2
]);
// é ç¹ãããã¡ãäœæããŠããŒã¿ãã¢ããããŒã
let vertexBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
// ã€ã³ããã¯ã¹ãããã¡ãäœæããŠããŒã¿ãã¢ããããŒã
let indexBuffer = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indices, gl.STATIC_DRAW);
// ããªããã£ããªã¹ã¿ãŒããæå¹ã«ããïŒWebGL 1.0ã¯æ¡åŒµæ©èœãå¿
èŠïŒ
if (ext) {
gl.enable(ext.PRIMITIVE_RESTART_OES);
gl.primitiveRestartIndexOES(65535);
} else if (gl instanceof WebGL2RenderingContext) {
gl.enable(gl.PRIMITIVE_RESTART);
gl.primitiveRestartIndex(65535);
}
// é ç¹å±æ§ã®ã»ããã¢ããïŒé ç¹äœçœ®ããã±ãŒã·ã§ã³0ã«ãããšä»®å®ïŒ
gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 0, 0);
gl.enableVertexAttribArray(0);
// ã€ã³ããã¯ã¹ãããã¡ã䜿çšããŠèŠçŽ ãæç»
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
gl.drawElements(gl.LINE_LOOP, indices.length, gl.UNSIGNED_SHORT, 0);
ãã®äŸã§ã¯ã2ã€ã®æ£æ¹åœ¢ãåäžã®æç»ã³ãŒã«å ã§å¥ã ã®ã©ã€ã³ã«ãŒããšããŠæç»ãããŸããã€ã³ããã¯ã¹65535ãããªããã£ããªã¹ã¿ãŒãã€ã³ããã¯ã¹ãšããŠæ©èœãã2ã€ã®æ£æ¹åœ¢ãåé¢ããŸããWebGL 2.0ãŸãã¯`OES_element_index_uint`æ¡åŒµæ©èœã䜿çšããŠ32ãããã€ã³ããã¯ã¹ãå¿ èŠãªå Žåããªã¹ã¿ãŒãå€ã¯4294967295ã«ãªããã€ã³ããã¯ã¹ã¿ã€ãã¯`gl.UNSIGNED_INT`ã«ãªããŸãã
ããã©ãŒãã³ã¹ã«é¢ããèæ ®äºé
ããªããã£ããªã¹ã¿ãŒãã¯å€§ããªããã©ãŒãã³ã¹äžã®å©ç¹ãæäŸããŸããã以äžã®ç¹ãèæ ®ããããšãéèŠã§ãïŒ
- æ¡åŒµæ©èœæå¹åã®ãªãŒããŒãããïŒ WebGL 1.0ã§ã¯ã`OES_primitive_restart`æ¡åŒµæ©èœã®ç¢ºèªãšæå¹åã«ããããªãªãŒããŒããããå ãããŸãããããããã®ãªãŒããŒãããã¯éåžžãæç»ã³ãŒã«ã®åæžã«ããããã©ãŒãã³ã¹åäžã«æ¯ã¹ãã°ç¡èŠã§ããçšåºŠã§ãã
- ã¡ã¢ãªäœ¿çšéïŒ ã€ã³ããã¯ã¹ãããã¡ã«ããªããã£ããªã¹ã¿ãŒãã€ã³ããã¯ã¹ãå«ãããšããããã¡ã®ãµã€ãºãå¢å ããŸããç¹ã«éåžžã«å€§ããªã¡ãã·ã¥ãæ±ãå Žåã¯ãã¡ã¢ãªäœ¿çšéãšããã©ãŒãã³ã¹åäžã®ãã¬ãŒããªããè©äŸ¡ããŠãã ããã
- äºææ§ïŒ WebGL 2.0ã¯ãã€ãã£ãã§ããªããã£ããªã¹ã¿ãŒãããµããŒãããŠããŸãããå€ãããŒããŠã§ã¢ããã©ãŠã¶ã¯ãããèªäœã`OES_primitive_restart`æ¡åŒµæ©èœãå®å šã«ã¯ãµããŒãããŠããªãå ŽåããããŸããäºææ§ã確ä¿ããããã«ãåžžã«ç°ãªããã©ãããã©ãŒã ã§ã³ãŒãããã¹ãããŠãã ããã
- ä»£æ¿æè¡ïŒ ç¹å®ã®ã·ããªãªã§ã¯ãã€ã³ã¹ã¿ã³ã·ã³ã°ããžãªã¡ããªã·ã§ãŒããŒãªã©ã®ä»£æ¿æè¡ããããªããã£ããªã¹ã¿ãŒããããåªããããã©ãŒãã³ã¹ãæäŸããå ŽåããããŸããã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®èŠä»¶ãèæ ®ããæãé©åãªæ¹æ³ãéžæããŠãã ããã
å®éã®ããã©ãŒãã³ã¹åäžãå®éåããããã«ãããªããã£ããªã¹ã¿ãŒãã䜿çšããå Žåãšäœ¿çšããªãå Žåã§ã¢ããªã±ãŒã·ã§ã³ã®ãã³ãããŒã¯ãè¡ãããšãæ€èšããŠãã ãããããŒããŠã§ã¢ããã©ã€ãã«ãã£ãŠçµæã¯ç°ãªãå ŽåããããŸãã
ãŠãŒã¹ã±ãŒã¹ãšäŸ
ããªããã£ããªã¹ã¿ãŒãã¯ã以äžã®ã·ããªãªã§ç¹ã«åœ¹ç«ã¡ãŸãïŒ
- è€æ°ã®äžé£ç¶ãªç·ãäžè§åœ¢ã®æç»ïŒ æ£æ¹åœ¢ã°ãªããã®äŸã§ç€ºããããã«ãããªããã£ããªã¹ã¿ãŒãã¯ãã¯ã€ã€ãŒãã¬ãŒã ãã¢ãŠãã©ã€ã³ãããŒãã£ã¯ã«ãªã©ãäžé£ç¶ãªç·ãäžè§åœ¢ã®ã³ã¬ã¯ã·ã§ã³ãã¬ã³ããªã³ã°ããã®ã«æé©ã§ãã
- äžé£ç¶æ§ãæã€è€éãªã¢ãã«ã®ã¬ã³ããªã³ã°ïŒ äžé£ç¶ãªããŒãã穎ãæã€ã¢ãã«ã¯ãããªããã£ããªã¹ã¿ãŒãã䜿çšããŠå¹ççã«ã¬ã³ããªã³ã°ã§ããŸãã
- ããŒãã£ã¯ã«ã·ã¹ãã ïŒ ããŒãã£ã¯ã«ã·ã¹ãã ã§ã¯ã倿°ã®å°ããç¬ç«ããããŒãã£ã¯ã«ãã¬ã³ããªã³ã°ããããšããããããŸããããªããã£ããªã¹ã¿ãŒãã䜿çšããŠããããã®ããŒãã£ã¯ã«ãåäžã®æç»ã³ãŒã«ã§æç»ã§ããŸãã
- ããã·ãŒãžã£ã«ãžãªã¡ããªïŒ ãžãªã¡ããªãåçã«çæããéãããªããã£ããªã¹ã¿ãŒãã¯äžé£ç¶ãªã¹ããªããã®äœæãšã¬ã³ããªã³ã°ã®ããã»ã¹ãç°¡çŽ åããŸãã
å®äžçã§ã®äŸïŒ
- å°åœ¢ã¬ã³ããªã³ã°ïŒ å°åœ¢ãè€æ°ã®äžé£ç¶ãªããããšããŠè¡šçŸããããšã¯ãç¹ã«è©³çްã¬ãã«ïŒLODïŒæè¡ãšçµã¿åãããå Žåã«ãããªããã£ããªã¹ã¿ãŒãã®æ©æµãåããããšãã§ããŸãã
- CAD/CAMã¢ããªã±ãŒã·ã§ã³ïŒ è€éãªè©³çްãæã€æ©æ¢°éšåã衚瀺ããã«ã¯ãå€ãã®å°ããªç·åãäžè§åœ¢ãã¬ã³ããªã³ã°ããããšããããããŸããããªããã£ããªã¹ã¿ãŒãã¯ããããã®ã¢ããªã±ãŒã·ã§ã³ã®ã¬ã³ããªã³ã°ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
- ããŒã¿å¯èŠåïŒ ããŒã¿ãäžé£ç¶ãªç¹ãç·ããŸãã¯ããªãŽã³ã®éåãšããŠèŠèŠåããå Žåãããªããã£ããªã¹ã¿ãŒãã䜿çšããŠæé©åã§ããŸãã
çµè«
ã¡ãã·ã¥ããªããã£ããªã¹ã¿ãŒãã¯ãWebGLã«ããããžãªã¡ããªã¹ããªããã¬ã³ããªã³ã°ãæé©åããããã®è²Žéãªãã¯ããã¯ã§ããæç»ã³ãŒã«ã®ãªãŒããŒããããåæžããCPUãšGPUã®äœ¿çšçãåäžãããããšã§ã3Dã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸãããã®å©ç¹ãå®è£ ã®è©³çްãããã³ããã©ãŒãã³ã¹ã«é¢ããèæ ®äºé ãçè§£ããããšã¯ããã®ããã³ã·ã£ã«ãæå€§éã«æŽ»çšããããã«äžå¯æ¬ ã§ããããã©ãŒãã³ã¹ã«é¢ãããã¹ãŠã®ã¢ããã€ã¹ãšåæ§ã«ããã³ãããŒã¯ãè¡ããæž¬å®ããããšãéèŠã§ãïŒ
ã¡ãã·ã¥ããªããã£ããªã¹ã¿ãŒããWebGLã¬ã³ããªã³ã°ãã€ãã©ã€ã³ã«çµã¿èŸŒãããšã§ãç¹ã«è€éã§åçã«çæããããžãªã¡ããªãæ±ãéã«ãããå¹ççã§å¿çæ§ã®é«ã3Däœéšãåµåºã§ããŸããããã«ãããããã¹ã ãŒãºãªãã¬ãŒã ã¬ãŒããããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ããããŠãã詳现ãªè€éãªã·ãŒã³ãã¬ã³ããªã³ã°ããèœåãåŸãããŸãã
ãèªèº«ã®WebGLãããžã§ã¯ãã§ããªããã£ããªã¹ã¿ãŒãã詊ãããã®ããã©ãŒãã³ã¹åäžãçŽæ¥èгå¯ããŠã¿ãŠãã ããã3Dã°ã©ãã£ãã¯ã¹ã¬ã³ããªã³ã°ãæé©åããããã®åŒ·åãªããŒã«ã§ããããšããããã§ãããã